package com.qf.controller;

import com.qf.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ExtendedModelMap;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.Map;

/**
 * 响应：
 *   页面转发
 *   页面重定向
 *   传递数据到页面上进行回显
 *
 *   @SessionAttributes(value = {"name","age"}) :
 *     以后 把 name / age 设置到request对象中的时候 同时在Session中保存一份
 *
 * @author lixu
 */
@Controller
@RequestMapping("/response")
@SessionAttributes(value = {"name","age"})
public class ResponseController {


    /**
     *
     * 第一种：方式
     * SpringMvc  转发  及 数据传递
     *
     *  视图解析器
     */
    @GetMapping("/test3")
    public ModelAndView test3(){
        //Model保存数据
        //View : 视图的名称
        ModelAndView mav = new ModelAndView();
        mav.setViewName("hello"); //底层：  request.getRequestDispatcher("/WEB-INF/jsp/error.jsp").forward(request,response);
        mav.addObject("banji","gp12"); // 底层：request.setAttribute(k,v)
        mav.addObject("hongming","100");
        mav.addObject("name","xixi");
        mav.addObject("age","100");
        return mav;
    }
    @GetMapping("/cleanSession")
    public String clearSession(SessionStatus sessionStatus){
        sessionStatus.setComplete();//@SessionAttributes(value = {"name","age"})： 生产的数据清理掉
        return "hello";
    }

    /**
     *
     * 第二种：方式
     * SpringMvc  转发  及 数据传递
     *
     *  视图解析器
     */
    @GetMapping("/test5")
    public String test5(Model model, Map map,Integer id,User user,HttpServletRequest request){
        System.out.println("id:" + id);
        System.out.println("user:" + user);
        map.put("banji","gp12");
        map.put("hongming","100");


/*        model.addAttribute("banji","gp12");
        model.addAttribute("hongming","100");*/
        //转发 视图解析器 /WEB-INF/jsp/hello.jsp
        return "hello";
    }
    /**
     * 第二种：方式  转发到其它 的方法
     */
    @GetMapping("/test6")
    public String test6(){

        return "forward:/response/test5";//转发到其它 的方法
        //return "hello";//转发JSP页面
    }
    /**
     * 第二种：方式  重定向
     * RedirectAttributes : 情况传递数据  底层 ：/response/test5?id=id&name=。。
     */
    @GetMapping("/test7")
    public String test7(User user, RedirectAttributes redirectAttributes){
        redirectAttributes.addAttribute("id",user.getId());
        redirectAttributes.addAttribute("name",user.getName());

        return "redirect:/response/test5";//转发到其它 的方法
    }












    /**
     * 响应 页面转发
     * 原始方式 : SpringMVC的三大组件 你一个都不会给你使用
     */
    @GetMapping("/test1")
    public void test1(HttpServletRequest request,
                      HttpServletResponse response,HttpSession session) throws Exception{

        //转发
        //request.getRequestDispatcher("/WEB-INF/jsp/hello.jsp").forward(request,response);
        //重定向  浏览器第二次请求 /WEB-INF/jsp/hello.jsp
        response.sendRedirect("/test2");
    }

    /**
     * 浏览器的第二次请求方法   原始方式
     * @param request
     * @param response
     * @param session
     * @throws Exception
     */
    @GetMapping("/test2")
    public void test2(HttpServletRequest request,
                      HttpServletResponse response,HttpSession session) throws Exception{

        request.setAttribute("banji","gp12");
        request.setAttribute("banji123","gp12");
        request.setAttribute("name","gp12");
        request.setAttribute("age","66");
        request.setAttribute("birthday","20000000"); //


        //@SessionAttributes(value = {"name","age"})


        session.setAttribute("loginUser","ff");
        session.setAttribute("code","3412");
        //session.setAttribute("banji","gp12");
        //转发
        request.getRequestDispatcher("/WEB-INF/jsp/hello.jsp").forward(request,response);
    }







}
